/**
 * flexWidth
 * @param prop 每列的prop 可传''
 * @param tableData 表格数据
 * @param title 标题长内容短的，传标题  可不传
 * @param num 列中有标签等加的富余量
 * @returns 列的宽度
 * 注：prop,title有一个必传
 */
export function flexWidth(prop, tableData, title, num = 0) {
  if (tableData.length === 0) {
    //表格没数据不做处理
    return
  }
  let flexWidth2 = 0
  //初始化表格列宽
  let columnContent = ''
  //占位最宽的内容
  let canvas = document.createElement('canvas')
  let context = canvas.getContext('2d')
  context.font = '14px Microsoft YaHei'
  if (prop === '' && title) {
    //标题长内容少的，取标题的值,
    columnContent = title
  } else {
    // 获取该列中占位最宽的内容
    let index = 0
    for (let i = 0; i < tableData.length; i++) {
      const now_temp = tableData[i][prop] + ''
      const max_temp = tableData[index][prop] + ''
      const now_temp_w = context.measureText(now_temp).width
      const max_temp_w = context.measureText(max_temp).width
      if (now_temp_w > max_temp_w) {
        index = i
      }
    }
    columnContent = tableData[index][prop]
    //比较占位最宽的值跟标题、标题为空的留出四个位置
    const column_w = context.measureText(columnContent).width
    const title_w = context.measureText(title).width
    if (column_w < title_w) {
      columnContent = title + '加' || '留字'
    }
  }
  // 计算最宽内容的列宽
  let width = context.measureText(columnContent)
  flexWidth2 = width.width + num
  return flexWidth2
}
/**
 * flexColumnWidth
 * @param str 每列的prop 可传''
 * @param tableData 表格数据
 * @param title 标题长内容短的，传标题  可不传
 * @param num 列中有标签等加的富余量
 * @returns 列的宽度
 * 注：prop,title有一个必传
 */
export function flexColumnWidth(str, tableData, title, num = 0) {
  // str为该列的字段名(传字符串);tableData为该表格的数据源(传变量);
  // flag为可选值，可不传该参数,传参时可选'max'或'equal',默认为'max'
  // flag为'max'则设置列宽适配该列中最长的内容,flag为'equal'则设置列宽适配该列中第一行内容的长度。
  let flexWidth2 = 0
  //初始化表格列宽
  str = str + ''
  let columnContent = ''
  let canvas = document.createElement('canvas')
  let context = canvas.getContext('2d')
  context.font = '14px Microsoft YaHei'
  if (
    !tableData ||
    !tableData.length ||
    tableData.length === 0 ||
    tableData === undefined
  ) {
    return
  }
  if (str === '' && title) {
    //标题长内容少的，取标题的值,
    columnContent = title
    //if (flag === 'equal') {
    // 获取该列中第一个不为空的数据(内容)
    //for (let i = 0; i < tableData.length; i++) {
    //if (tableData[i][str].length > 0) {
    // console.log('该列数据[0]:', tableData[0][str])
    //columnContent = tableData[i][str]
    //break
    //}
    //}
  } else {
    // 获取该列中最长的数据(内容)
    let index = 0
    for (let i = 0; i < tableData.length; i++) {
      if (tableData[i][str] === null) {
        return
      }
      const now_temp = tableData[i][str] + ''
      const max_temp = tableData[index][str] + ''
      if (now_temp.length > max_temp.length) {
        index = i
      }
    }
    columnContent = tableData[index][str]
    //比较占位最宽的值跟标题、标题为空的留出四个位置
    const column_w = context.measureText(columnContent).width
    const title_w = context.measureText(title).width
    if (column_w < title_w) {
      columnContent = title + '加' || '留字'
    }
  }
  // console.log('该列数据[i]:', columnContent)
  // 以下分配的单位长度可根据实际需求进行调整
  let flexWidth = 0
  for (const char of columnContent) {
    if ((char >= 'A' && char <= 'Z') || (char >= 'a' && char <= 'z')) {
      // 如果是英文字符，为字符分配8个单位宽度
      flexWidth += 8
    } else if (char >= '\u4e00' && char <= '\u9fa5') {
      // 如果是中文字符，为字符分配15个单位宽度
      flexWidth += 15
    } else {
      // 其他种类字符，为字符分配8个单位宽度
      flexWidth += 8
    }
  }
  if (flexWidth < 80) {
    // 设置最小宽度
    flexWidth = 80
  }
  // if (flexWidth > 250) {
  //   // 设置最大宽度
  //   flexWidth = 250
  // }
  flexWidth2 = flexWidth + num
  return flexWidth2
}
